"""
类中的属性和方法
    类属性:类中定义的属性，能够被访问，但是需要通过类对象做修改
    实例属性:类中生成的实实例定义的属性。只能通过实例才能访问和修改，类对象访问不到
    类方法:类的内部使用@classmethod注解修饰的方法，是类方法
        和实例方法区别:类方法第一个参数是cls。在调用时和实例方法一样也要传类
    实例方法:类中以self开头的都是实例方法
        实例方法可以用实例调用，此时不需要传参
        也能通过类调用，此时需要传递self参数
    静态方法：
        和java里面的静态变量静态方法一样，常用于工具类 @staticmethod注解关键字
        静态方法只能通过类去调用
"""

class a():
    #类属性
    name=10
    #类方法
    @classmethod
    def a(cls):
        print("这是一个类方法")

    def a_self(self):
        print("这是实例方法")

    @staticmethod
    def static_method():
        print("这是静态方法")

    def __del__(self):
        print("垃圾回收方法，在垃圾回收前调用")

a1 = a()
print(a.name)
a1.age=11
print(a1.age)
# print(a.age)
#类方法
print(a.a())
print(a1.a())
#实例方法
print(a1.a_self())
print(a.a_self(a1))
print(a.static_method())

"""
垃圾回收-Java里面的gc
    java里面多线程会有垃圾收集器处理垃圾回收，
    python里面也有自动的垃圾回收机制，不用手动处理垃圾回收
    _del_方法是一个特殊方法，能在垃圾回收前进行调用
"""
A=a()
A=None
del A # del方法只是删除变量，没有删除对象
# 此时a()这个对象就是垃圾，必须回收不然影响内存性能
# 程序结束时，这些方法也会被垃圾回收
